Some example data rates for the collector if I turn off the "checks" for data integrity. This seems to be okay, the data is very consistent
Rolling Average (148): +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | 163.64 | 1.97 | 2.37 | 0.27 | 615.85 | 4.73 | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Rolling Average (148):
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 163.64 | 1.97 | 2.37 | 0.27 | 615.85 | 4.73 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
And here is if I have the integrity checks on. Doesn't seem to make much a difference.
Rolling Average (155): +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | 154.68 | 2.26 | 2.35 | 0.27 | 617.55 | 5.01 | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Rolling Average (155):
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 154.68 | 2.26 | 2.35 | 0.27 | 617.55 | 5.01 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
The difference is in the parsing stage. The UDP stage is pretty "bad" as it uses a lot of unessary copies. However, it wouldn't speed times up any reasonable amount to rewrite the code there.
I was able to achieve a ~33% speed up in parse time (parse time 3ms --> 2ms, for this case at least). This was achieved mostly by removing a large unncessary memory copy. I was appending the leftovers from the last UDP packet to the to the whole byte stream which required copying the whole byte stream. You really only need to do this for the first nalu packet (74 bytes).
I took a larger sample with 32 channels and and 4 windows. As expected performance goes up with event size (more data processed by the event builder for a similar amount of work).
Rolling Average (698): +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | 198.34 | 4.09 | 3.17 | 0.57 | 1309.74 | 7.91 | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ Event Timings (698): +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | Data Rate (MB/s) | Parse Time (ms) | Event Time (ms) | UDP Time (ms) | Data Processed (KB) | Total Time (ms) | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | 124.41 | 4.32 | 5.06 | 0.63 | 1295.00 | 10.17 | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Rolling Average (698):
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 198.34 | 4.09 | 3.17 | 0.57 | 1309.74 | 7.91 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Event Timings (698):
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| Data Rate (MB/s) | Parse Time (ms) | Event Time (ms) | UDP Time (ms) | Data Processed (KB) | Total Time (ms) |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 124.41 | 4.32 | 5.06 | 0.63 | 1295.00 | 10.17 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
1 second wait between processing:
Rolling Average (30): +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | 370.16 | 16.74 | 25.47 | 6.52 | 12715.87 | 50.09 | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ Event Timings (30): +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | Data Rate (MB/s) | Parse Time (ms) | Event Time (ms) | UDP Time (ms) | Data Processed (KB) | Total Time (ms) | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | 366.30 | 18.28 | 8.75 | 6.17 | 12518.00 | 33.37 | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Rolling Average (30):
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 370.16 | 16.74 | 25.47 | 6.52 | 12715.87 | 50.09 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Event Timings (30):
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| Data Rate (MB/s) | Parse Time (ms) | Event Time (ms) | UDP Time (ms) | Data Processed (KB) | Total Time (ms) |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 366.30 | 18.28 | 8.75 | 6.17 | 12518.00 | 33.37 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
no wait between processing
Rolling Average (40441): +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | 277.79 | 0.00 | 0.00 | 0.00 | 1.56 | 0.01 | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ Event Timings (40441): +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | Data Rate (MB/s) | Parse Time (ms) | Event Time (ms) | UDP Time (ms) | Data Processed (KB) | Total Time (ms) | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+ | 326.94 | 0.00 | 0.00 | 0.00 | 1.00 | 0.00 | +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Rolling Average (40441):
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| Avg Data Rate (MB/s) | Avg Parse Time (ms) | Avg Event Time (ms) | Avg UDP Time (ms) | Avg Data Processed (KB) | Avg Total Time (ms) |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 277.79 | 0.00 | 0.00 | 0.00 | 1.56 | 0.01 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Event Timings (40441):
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| Data Rate (MB/s) | Parse Time (ms) | Event Time (ms) | UDP Time (ms) | Data Processed (KB) | Total Time (ms) |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 326.94 | 0.00 | 0.00 | 0.00 | 1.00 | 0.00 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
It's interesting that it seems the performance seems to go down, then back up for processed chunk size.